package com.even.camerarecoder

import android.Manifest
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.FragmentActivity
import com.tbruyelle.rxpermissions3.RxPermissions

object PermissionsHelper {

    fun requestCameraPermission(activity: FragmentActivity, callback: () -> Unit) {
        RxPermissions(activity)
            .requestEach(Manifest.permission.CAMERA)
            .subscribe { permission ->
                when {
                    permission.granted -> {
                        // 已经授权了，开始使用功能吧
                        callback()
                    }
                    permission.shouldShowRequestPermissionRationale -> {
                        // 用户拒绝了摄像头权限，应该解释一下为什么需要此权限
                        AlertDialog.Builder(activity)
                            .setTitle("提示")
                            .setMessage("录像时需要用到摄像头权限，请允许此权限，否则无法使用录像功能")
                            .setPositiveButton("确定") { _, _ -> requestCameraPermission(activity, callback) }
                            .setNegativeButton("取消", null)
                            .setCancelable(false)
                            .create()
                            .show()
                    }
                    else -> {
                        // 用户拒绝了摄像头权限，并且勾选了不再提示
                        AlertDialog.Builder(activity)
                            .setTitle("提示")
                            .setMessage("拒绝了摄像头权限，而且选择不再提示。如果要打开此权限，可以在设置中找到应用来开启此权限")
                            .setPositiveButton("确定", null)
                            .setCancelable(false)
                            .create()
                            .show()
                    }
                }
            }
    }

    fun requestRecordAudioPermission(activity: FragmentActivity, callback: () -> Unit) {
        RxPermissions(activity)
            .requestEach(Manifest.permission.RECORD_AUDIO)
            .subscribe { permission ->
                when {
                    permission.granted -> {
                        // 已经授权了，开始使用功能吧
                        callback()
                    }
                    permission.shouldShowRequestPermissionRationale -> {
                        // 用户拒绝了录音权限，应该解释一下为什么需要此权限
                        AlertDialog.Builder(activity)
                            .setTitle("提示")
                            .setMessage("录音时需要用到录音权限，请允许此权限，否则无法使用录音功能")
                            .setPositiveButton("确定") { _, _ -> requestCameraPermission(activity, callback) }
                            .setNegativeButton("取消", null)
                            .setCancelable(false)
                            .create()
                            .show()
                    }
                    else -> {
                        // 用户拒绝了录音权限，并且勾选了不再提示
                        AlertDialog.Builder(activity)
                            .setTitle("提示")
                            .setMessage("拒绝了录音权限，而且选择不再提示。如果要打开此权限，可以在设置中找到应用来开启此权限")
                            .setPositiveButton("确定", null)
                            .setCancelable(false)
                            .create()
                            .show()
                    }
                }
            }
    }

}